/*
 * Licensed to the Tai Ping Jin Ke
 *
 * Copyright (c) 2022 .
 * All rights reserved.
 * 项目名称：太平金科-基础组件封装层-ElasticSearch-缺省实现
 * 版权说明：本软件属太平金融科技服务(上海)有限公司所有，在未获得太平金融科技服务(上海)有限公司正式授权情况下，任何企业和个人，不能获取、阅读、安装、传播本软件涉及的任何受知识产权保护的内容。
 */
package com.taipingframework.boot.es.conditions;

import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.search.aggregations.AbstractAggregationBuilder;
import org.elasticsearch.search.sort.SortBuilder;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;

import java.util.List;

/**
 * 条件构造抽象类
 *
 * @param <T>
 */
public abstract class Wrapper<T> {

    /**
     * 实体类型(主要用于确定泛型以及取TableInfo缓存)
     */
    Class<T> entityClass;

    /**
     * 分组
     */
    protected List<AbstractAggregationBuilder> aggregationBuilders;

    /**
     * 排序
     */
    protected List<SortBuilder> sortBuilders;

    /**
     * 搜索筛选
     */
    NativeSearchQueryBuilder searchQueryBuilder;

    /**
     * 布尔筛选
     */
    BoolQueryBuilder boolQueryBuilder;

    /**
     * EntityClass getter
     */
    public Class<T> getEntityClass() {
        return entityClass;
    }

    /**
     * 分组
     */
    public List<AbstractAggregationBuilder> getAggregationBuilders() {
        return aggregationBuilders;
    }

    /**
     * 排序
     */
    public List<SortBuilder> getSortBuilders() {
        return sortBuilders;
    }

    /**
     * 搜索筛选
     */
    public NativeSearchQueryBuilder getSearchQueryBuilder() {
        return searchQueryBuilder;
    }

    /**
     * 布尔筛选
     */
    public BoolQueryBuilder getBoolQueryBuilder() {
        return boolQueryBuilder;
    }

    /**
     * 条件清空
     */
    abstract void clear();

}
